#ifndef TASKPANELCONTROLLER_H
#define TASKPANELCONTROLLER_H

#include <QObject>
#include <QDateTime>
#include "view_global.h"

class PlanWidget;
class PlanTask;
class QPushButton;
class QShortcut;

/**
 * @brief [FDD-2025-03-015] 任务面板控制器
 * 
 * 职责：
 * - 管理任务面板的展开/收缩状态
 * - 连接 PlanService 信号到 PlanWidget
 * - 持久化面板状态到 ConfigService
 * - 提供防抖与状态机保护
 */
class VIEW_EXPORT TaskPanelController : public QObject
{
    Q_OBJECT
    
public:
    explicit TaskPanelController(QObject* parent = nullptr);
    ~TaskPanelController();
    
    /**
     * @brief [API-002][AC-004] 绑定紧凑模式的 PlanWidget
     * @param widget PlanWidget 实例指针
     * @return 是否成功绑定
     * @error E003_WIDGET_NULL: widget 为 nullptr
     */
    bool bindPlanWidget(PlanWidget* widget);
    
    /**
     * @brief [API-003][AC-002] 持久化面板状态
     * @param expanded 展开状态
     * @return 是否成功写入 ConfigService
     * @error E004_CONFIG_WRITE_FAILED: 配置写入失败
     */
    bool persistState(bool expanded);
    
    /**
     * @brief 绑定切换源（按钮 + 快捷键）
     * @param btn 任务面板切换按钮
     * @param shortcut Alt+T 快捷键
     */
    void bindToggleSources(QPushButton* btn, QShortcut* shortcut);
    
    /**
     * @brief [AC-003] 从 ConfigService 恢复面板状态
     */
    void restoreState();
    
signals:
    /**
     * @brief 面板状态已改变
     * @param expanded 新的展开状态
     */
    void stateChanged(bool expanded);
    
private slots:
    // [AC-004] PlanService 信号桥接 - 200ms 内刷新
    void onPlanServiceTasksUpdated(const QDate& date);
    void onPlanServiceTaskCreated(const PlanTask& task);
    void onPlanServiceTaskDeleted(const QString& taskId, const QDate& date);
    
private:
    PlanWidget* m_planWidget = nullptr;
    qint64 m_lastToggleTs = 0;  // 防抖时间戳
    bool m_fallbackState = false;  // 降级状态（配置写入失败时使用）
};

#endif // TASKPANELCONTROLLER_H
